#--
# Proyecto Único (Etapa 2)
# Analizador Sintáctico
# 
# Autores:
# (Grupo R07)
# César Hernández (06-39724)
# Daniel Valera (07-41725)
# 
# Versión: 0.1
#++
# = SymTable.rb
# Archivo que contiene la clase SymTable.

require "Sym"

# = Clase SymTable
# Clase compuesta por:
# <b>table</b>:: Tabla de símbolos.
class SymTable
  attr_reader :table
  
  # Inicializador de la clase.
  # <i><ATRIBUTO></i>:: <DESCRIPCIÓN>
  def initialize()
    @table = Hash.new()
  end
  
  # Método que permite insertar un símbolo en la tabla.
  # <i>symbol</i>:: Símbolo que se desea insertar.
  def insert(symbol)
  #--
    if !@table.has_value?(symbol)
      # Se coloca el identificador asociado al símbolo como su índice.
      @table[symbol.id] = symbol
      return symbol
    else
      puts "undef"
      return 
    end
  #++
  end
  
  # Método que permite buscar un símbolo en la tabla.
  # <i>id</i>:: Identificador asociado al símbolo que se desea buscar.
  def find(id)
    if @table.has_key?(id)
      return @table[id]
    else
      puts "undef"
      return 
    end
  end
  
  # Método que permite eliminar un símbolo de la tabla.
  # <i>id</i>:: Identificador asociado al símbolo que se desea eliminar.
  def delete(id)
     @table.delete(id)
  end
  
  # Método que permite obtener una representación en cadena de caracteres de
  # la tabla.
  def to_s
    result = "Tabla de símbolos:\n"
    @table.each do |name, symbol|
      result += symbol.to_s
    end
    return result + "\n"
  end
end

